package gmed;
 
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.io.*;
import java.sql.*;
import java.rmi.*;
import java.rmi.server.*;

public class gestao_impl implements gestao {
	
	private HashMap<Integer,Medico> medicos;
	private HashMap<Integer,Farmacia> farmacias;
	private HashMap<Integer,Utente> utentes;
	private HashMap<String,medicamento> medicamentos;
	private HashMap<String,especialidade> especialidades;
	
	
	public gestao_impl(){
		medicos= new HashMap<Integer,Medico>();
		farmacias= new HashMap<Integer,Farmacia>();
		utentes=new HashMap<Integer,Utente>();
		medicamentos=new HashMap<String,medicamento>();
		especialidades=new HashMap<String,especialidade>();
		
	}
	
	
		public Medico cria_medico(int nlicenca, String nome, int esp) throws RemoteException{
				if(medicos.containsKey(Integer.valueOf(nlicenca))){
					return medicos.get(Integer.valueOf(nlicenca));
				}else{
					Medico_Impl m=new Medico_Impl(nlicenca);
					m.set_nome(nome);
					m.set_especialidade(esp);
					medicos.put(Integer.valueOf(nlicenca), m);
					
					return m;
		}
	}
		public Medico elimina_medico(int nlicenca) throws RemoteException{
			Medico_Impl em= new Medico_Impl(nlicenca);
			em.elimina_medico(nlicenca);
			return null;
			
		}
		
	
	public Farmacia cria_farmacia(int nlicenca, String nome, String morada, int nif) throws RemoteException{
				if(farmacias.containsKey(Integer.valueOf(nlicenca))){
					return farmacias.get(Integer.valueOf(nlicenca));
				}else{
					Farmacia f=new Farmacia_Impl(nlicenca);
					f.set_nome(nome);
					f.set_morada(morada);
					f.set_nif(nif);
					
					farmacias.put(Integer.valueOf(nlicenca), f);
					return f;
		}
	}
	public Farmacia elimina_farmacia(int nlicenca) throws RemoteException{
		Farmacia_Impl ef= new Farmacia_Impl(nlicenca);
		ef.elimina_farmacia(nlicenca);
		return null;
		
	}
	
	public Utente cria_utente(int bi, String nome, String morada) throws RemoteException{
		if(utentes.containsKey(Integer.valueOf(bi))){
			return utentes.get(Integer.valueOf(bi));
		}else{
			Utente u=new Utente_Impl(bi);
			u.set_nome(nome);
			u.set_morada(morada);
			
			
			utentes.put(Integer.valueOf(bi), u);
			return u;
			}
	}
	public Utente elimina_utente(int bi) throws RemoteException{
		Utente_Impl eu= new Utente_Impl(bi);
		eu.elimina_utente(bi);
		return null;
		
	}
	public medicamento cria_medicamento(String nome) throws RemoteException{
		if(medicamentos.containsKey(String.valueOf(nome))){
			return medicamentos.get(String.valueOf(nome));
		}else{
			medicamento u=new medicamento_Impl(nome);
			u.set_nome(nome);
			medicamentos.put(String.valueOf(nome), u);
			return u;
			}
	}
	public medicamento elimina_medicamento(String nome)throws RemoteException{
		medicamento_Impl emd= new medicamento_Impl(nome);
		emd.elimina_medicamento(nome);
		return null;
	}
	public especialidade cria_especialidade(String nome) throws RemoteException{
		if(especialidades.containsKey(String.valueOf(nome))){
			return especialidades.get(String.valueOf(nome));
		}else{
			especialidade e=new especialidade_Impl(nome);
			e.set_nome(nome);
			especialidades.put(String.valueOf(nome), e);
			return e;
			}
	}
	public especialidade elimina_especialidade(String nome)throws RemoteException{
		especialidade_Impl ee= new especialidade_Impl(nome);
		ee.elimina_especialidade(nome);
		return null;
	}

	
	
	
	public estatisticas est_M111(int d,int m,int a) throws RemoteException{
		estatisticas_impl e=new estatisticas_impl();
		e.get_dia(d);
		e.get_mes(m);
		e.get_ano(a);
		e.executa_query(111);
		
		
		return e;
	}

}
